package com.ljxt.dt.service.purchasingmanagementservice;

import com.ljxt.dt.domain.*;
import com.ljxt.dt.vo.purchasingmanagement.CgddHandlerInfo;
import com.ljxt.dt.vo.purchasingmanagement.PurchaseInfoSelect;
import com.ljxt.dt.vo.purchasingmanagement.PurchaseMainVo;

import java.util.List;
import java.util.Map;

/**
 * @author 徐浩钦
 * @version 1.0.0
 * @date 2020/5/11 15:21
 * @copyright 老九学堂T11
 */
public interface PurchaseInfoService {

    /**
     * 分页式的查询所有数据
     * @param pageIndex 下标
     * @param pageSize 每页显示的最大数
     * @return
     */
     List<PurchaseMainVo> selectAll(int pageIndex, int pageSize, PurchaseInfoSelect select);

    /**
     * 根据采购订单的 id 查询旗下所属的 商品集合
     * @param id
     * @return
     */
    List<GoodsInfo> selectGoodsByPurchaseId(int id);

    /**
     * 计算某个采购订单的明细商品总价
     * @param rodId
     * @return
     */
    Double sumMoney(String rodId);

    /**
     * 查询所有采购订单的数量
     * @return
     */
    Integer selectCountByAll(PurchaseInfoSelect select);

    /**
     * 根据采购订单的编号 获取 明细的对象集合
     * @return
     */
    List<PurchaseDetail> selectPurchaseDetailByPurchaseInfo(String ordId);

    /**
     * 根据 属性和值 的数字获取 对应的数据库里的属性和h值
     * @param map
     * @return
     */
    Map<String,String> selectAttrAndCategory(Map<String,String> map);

    /**
     * 根据采购订单获得所有的流程信息
     * @return
     */
    List<CgddHandlerInfo> selectHandlerByCgddId(String cgddId);

    /**
     * 根据采购订单查询审核流程的 object 对象
     */
    HandlerInfo selectObjByCgdd(String cgdd);

    /**
     * 根据审核流程对象添加流程
     * @param handlerInfo
     * @return 返回受影响的行数
     */
    int insertIntoHandlerInfo(HandlerInfo handlerInfo);

    /**
     * 查询所有状态的信息用于查询下拉框的显示
     * @return
     */
    List<BillState> selectBillstateAll();

    /**
     * 查询所有的供应商信息用于查询下拉框的显示
     * @return
     */
    List<SupplierInfo> selectSupplierInfoAll();


    /**
     * 根据 orderNo 删除明细表和信息表
     * @param orderNo
     * @return
     */
    int deletePurchaseInfoAndPurchaseDetail(String... orderNo);


    /**
     * 判断某个订单是否是 1 状态的订单可删除类型
     * @return
     */
    boolean isStateIdDelete(String orderNo);
}
